//////////////////////////////////////////////////////////////////////////////
//                                                                          //
// Copyright (C) LibG.org. 2008. All rights reserved.                       //
//                                                                          //
// Licensed under GPL, you may use this file except for commercial purpose. //
//                                                                          //
// Permission to use, copy, modify, and distribute this software in object  //
// code form for any purpose and without fee is hereby granted, provided    //
// that the above copyright notice appears in all copies and that both that //
// copyright notice and the limited warranty and restricted rights notice   //
// below appear in all supporting documentation.                            //
//                                                                          //
//////////////////////////////////////////////////////////////////////////////

#ifndef HEADER_GIPOINT3_H
#define HEADER_GIPOINT3_H

#include "gitypes.h"
class giVector3;

class giPoint3 : public giValueFloat3
{
public:
    giPoint3();
    giPoint3( const giPoint3& v );
    giPoint3( const giDouble& vx, const giDouble& vy, const giDouble& vz );

    // assignment operators
    giPoint3& operator += ( const giPoint3& v );
    giPoint3& operator -= ( const giPoint3& v );
    giPoint3& operator *= ( const giDouble& v );
    giPoint3& operator /= ( const giDouble& v );

    // unary operators
    giPoint3 operator + () const;
    giPoint3 operator - () const;

    // binary operators
    giPoint3 operator + ( const giPoint3& v ) const;
    giPoint3 operator - ( const giPoint3& v ) const;
    giPoint3 operator * ( const giDouble& v ) const;
    giPoint3 operator / ( const giDouble& v ) const;

    // relational and equality operators
    bool operator == ( const giPoint3& v ) const;
    bool operator != ( const giPoint3& v ) const;

    // conversion
    giVector3   toVector() const;

    // stock values
    static const giPoint3 kZero;

};

#endif // HEADER_GIPOINT3_H